forked from github/server
HELP GIVE
GIVE only for luxuries and herbs
This commit is contained in:
parent
521719e239
commit
3b6a4fd3ba
5 changed files with 58 additions and 19 deletions
|
@ -403,6 +403,32 @@ do_recruiting(recruitment * recruits, int available)
|
|||
return recruited;
|
||||
}
|
||||
|
||||
static void
|
||||
feedback_give_not_allowed(unit * u, order * ord)
|
||||
{
|
||||
ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "feedback_give_forbidden", ""));
|
||||
}
|
||||
|
||||
static boolean check_give(unit * u, unit * u2, const item_type * itype, int mask)
|
||||
{
|
||||
if (u2) {
|
||||
if (u->faction!=u2->faction) {
|
||||
int rule = rule_give();
|
||||
if (itype) {
|
||||
assert(mask==0);
|
||||
if (itype->rtype->ltype) mask |= GIVE_LUXURIES;
|
||||
else if (fval(itype, ITF_HERB)) mask |= GIVE_HERBS;
|
||||
else mask |= GIVE_GOODS;
|
||||
}
|
||||
return (rule&mask)!=0;
|
||||
}
|
||||
} else {
|
||||
int rule = rule_give();
|
||||
return (rule & GIVE_PEASANTS)!=0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
free_recruitments(recruitment * recruits)
|
||||
{
|
||||
|
@ -614,7 +640,7 @@ give_cmd(unit * u, order * ord)
|
|||
region * r = u->region;
|
||||
unit *u2;
|
||||
const char *s;
|
||||
int i, n, rule = rule_give();
|
||||
int i, n;
|
||||
const item_type * itype;
|
||||
param_t p;
|
||||
plane * pl;
|
||||
|
@ -628,11 +654,8 @@ give_cmd(unit * u, order * ord)
|
|||
return;
|
||||
}
|
||||
|
||||
if (getunitpeasants && (rule & GIVE_PEASANTS)==0) {
|
||||
ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "feedback_give_forbidden", ""));
|
||||
return;
|
||||
} else if (u2 && u2->faction!=u->faction && (rule & GIVE_OTHERS)==0) {
|
||||
ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "feedback_give_forbidden", ""));
|
||||
if (!check_give(u, u2, NULL, GIVE_ALLITEMS)) {
|
||||
feedback_give_not_allowed(u, ord);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -714,6 +737,10 @@ give_cmd(unit * u, order * ord)
|
|||
msg_feedback(u, ord, "race_nogive", "race", u->race));
|
||||
return;
|
||||
}
|
||||
if (!check_give(u, u2, NULL, GIVE_HERBS)) {
|
||||
feedback_give_not_allowed(u, ord);
|
||||
return;
|
||||
}
|
||||
if (u2 && !(u2->race->ec_flags & GETITEM)) {
|
||||
ADDMSG(&u->faction->msgs,
|
||||
msg_feedback(u, ord, "race_notake", "race", u2->race));
|
||||
|
@ -765,6 +792,10 @@ give_cmd(unit * u, order * ord)
|
|||
else if (p==P_ANY) {
|
||||
const char * s = getstrtoken();
|
||||
|
||||
if (!check_give(u, u2, NULL, GIVE_ALLITEMS)) {
|
||||
feedback_give_not_allowed(u, ord);
|
||||
return;
|
||||
}
|
||||
if (*s == 0) { /* Alle Gegenstände übergeben */
|
||||
|
||||
/* do these checks once, not for each item we have: */
|
||||
|
@ -826,8 +857,12 @@ give_cmd(unit * u, order * ord)
|
|||
if (itype!=NULL) {
|
||||
item * i = *i_find(&u->items, itype);
|
||||
if (i!=NULL) {
|
||||
n = i->number - get_reservation(u, itype->rtype);
|
||||
give_item(n, itype, u, u2, ord);
|
||||
if (check_give(u, u2, itype, 0)) {
|
||||
n = i->number - get_reservation(u, itype->rtype);
|
||||
give_item(n, itype, u, u2, ord);
|
||||
} else {
|
||||
feedback_give_not_allowed(u, ord);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -852,10 +887,6 @@ give_cmd(unit * u, order * ord)
|
|||
return;
|
||||
}
|
||||
|
||||
if (u2 && !alliedunit(u2, u->faction, HELP_GIVE) && !ucontact(u2, u)) {
|
||||
cmistake(u, ord, 40, MSG_COMMERCE);
|
||||
return;
|
||||
}
|
||||
i = findparam(s, u->faction->locale);
|
||||
if (i == P_PERSON) {
|
||||
if (!(u->race->ec_flags & GIVEPERSON)) {
|
||||
|
@ -882,7 +913,11 @@ give_cmd(unit * u, order * ord)
|
|||
|
||||
itype = finditemtype(s, u->faction->locale);
|
||||
if (itype!=NULL) {
|
||||
give_item(n, itype, u, u2, ord);
|
||||
if (check_give(u, u2, itype, 0)) {
|
||||
give_item(n, itype, u, u2, ord);
|
||||
} else {
|
||||
feedback_give_not_allowed(u, ord);
|
||||
}
|
||||
return;
|
||||
}
|
||||
cmistake(u, ord, 123, MSG_COMMERCE);
|
||||
|
|
|
@ -3067,7 +3067,7 @@ int rule_give(void)
|
|||
{
|
||||
static int value = -1;
|
||||
if (value<0) {
|
||||
value = get_param_int(global.parameters, "rules.give", 7);
|
||||
value = get_param_int(global.parameters, "rules.give", GIVE_DEFAULT);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
|
|
@ -422,9 +422,12 @@ extern int rule_give(void);
|
|||
|
||||
#define GIVE_SELF 1
|
||||
#define GIVE_PEASANTS 2
|
||||
#define GIVE_OTHERS 4
|
||||
#define GIVE_ONDEATH 8
|
||||
#define GIVE_ANY (GIVE_SELF|GIVE_PEASANTS|GIVE_OTHERS)
|
||||
#define GIVE_LUXURIES 4
|
||||
#define GIVE_HERBS 8
|
||||
#define GIVE_GOODS 16
|
||||
#define GIVE_ONDEATH 32
|
||||
#define GIVE_ALLITEMS (GIVE_GOODS|GIVE_HERBS|GIVE_LUXURIES)
|
||||
#define GIVE_DEFAULT (GIVE_SELF|GIVE_PEASANTS|GIVE_LUXURIES|GIVE_HERBS|GIVE_GOODS)
|
||||
|
||||
extern struct attrib_type at_guard;
|
||||
extern void free_gamedata(void);
|
||||
|
|
|
@ -217,7 +217,7 @@ gift_items(unit * u, int flags)
|
|||
int rule = rule_give();
|
||||
|
||||
if ((u->faction->flags&FFL_QUIT)==0 || (rule&GIVE_ONDEATH)==0) {
|
||||
if ((rule&GIVE_OTHERS)==0 && (flags&GIFT_FRIENDS)) flags-=GIFT_FRIENDS;
|
||||
if ((rule&GIVE_ALLITEMS)==0 && (flags&GIFT_FRIENDS)) flags-=GIFT_FRIENDS;
|
||||
if ((rule&GIVE_PEASANTS)==0 && (flags&GIFT_PEASANTS)) flags-=GIFT_PEASANTS;
|
||||
if ((rule&GIVE_SELF)==0 && (flags&GIFT_SELF)) flags-=GIFT_SELF;
|
||||
}
|
||||
|
|
|
@ -165,9 +165,10 @@
|
|||
<param name="rules.economy.wages" value="1"/>
|
||||
<param name="rules.economy.roqf" value="5"/>
|
||||
<param name="rules.economy.herbrot" value="0"/>
|
||||
<param name="rules.give" value="15"/> <!-- self + peasants + herbs + lux - goods -->
|
||||
<param name="rules.economy.grow" value="1"/>
|
||||
<param name="rules.tactics.formula" value="1"/> <!-- 10% per skilldiff -->
|
||||
<param name="rules.help.mask" value="fight guard money"/>
|
||||
<param name="rules.help.mask" value="fight guard money give"/>
|
||||
<param name="movement.shipspeed.skillbonus" value="6"/>
|
||||
<param name="alliance.auto" value="fight"/>
|
||||
<param name="alliance.restricted" value="fight"/>
|
||||
|
|
Loading…
Reference in a new issue